﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Cataloger
{
    [Serializable]
    public class TypPliku
    {
		#region Fields (1) 
        public static List<TypPliku> TypyPlikow = new List<TypPliku>();
        List<String> slowaW = new List<string>();

		#endregion Fields 

		#region Constructors (1) 

        public TypPliku(string nazwa)
        {
            this.Nazwa = nazwa;
        }

		#endregion Constructors 

		#region Properties (2) 

        public string Nazwa
        {
            get;
            set;
        }

        public List<String> SlowaW
        {
            get { return slowaW; }
        }

		#endregion Properties 

		#region Methods (9) 

		// Public Methods (8) 

        public static void DodajNowyTyp()
        {
            FrmDodajTyp fNowyTyp = new FrmDodajTyp();
            if (fNowyTyp.ShowDialog() == DialogResult.OK)
            {
                TypPliku typ = new TypPliku(fNowyTyp.Nazwa);
                foreach (string sl in fNowyTyp.Slowa)
                {
                    if (!typ.SlowaW.Contains(sl))
                    {
                        typ.DodajSlowo(sl);
                    }

                }
                if (!TypPliku.TypyPlikow.Contains(typ))
                {
                    TypPliku.TypyPlikow.Add(typ);
                    MessageBox.Show("Pomyślnie dodano nowy typ: " + typ.Nazwa, "Sukces", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                }
            }
        }

        public static void DodajNowyTyp(TypPliku typPl)
        {
            
            FrmDodajTyp fNowyTyp = new FrmDodajTyp(typPl);
            if (fNowyTyp.ShowDialog() == DialogResult.OK)
            {
                TypPliku.TypyPlikow.Remove(typPl);
                TypPliku typ = new TypPliku(fNowyTyp.Nazwa);
                foreach (string sl in fNowyTyp.Slowa)
                {
                    if (!typ.SlowaW.Contains(sl))
                    {
                        typ.DodajSlowo(sl);
                    }

                }
                if (!TypPliku.TypyPlikow.Contains(typ))
                {
                    TypPliku.TypyPlikow.Add(typ);
                    MessageBox.Show("Pomyślnie zakończono edycję typu: " + typ.Nazwa, "Sukces", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                }
                
            }
        }

        public void DodajSlowo(string slowo)
        {
            if (!SlowaW.Contains(slowo.ToLower().Trim()))
            {
                SlowaW.Add(slowo);
            }
        }

        public void PokazPasujace(ListView lst)
        {
            lst.BeginUpdate();
            foreach (Katalog kat in Katalog.WczytaneKatalogi)
            {
                foreach (Nosnik n in kat.Nosniki)
                {
                    SerachDir(n.Root, lst);
                }
            }
            lst.EndUpdate();
        }

        public override string ToString()
        {
            return Nazwa;
        }

        public void UsunSlowo(string slowo)
        {
            if (SlowaW.Contains(slowo.ToLower().Trim()))
            {
                SlowaW.Remove(slowo);
            }
        }

        public void WyczyscListeSlow()
        {
            SlowaW.Clear();
        }

        public static void WyswietlTypy(ListBox lbox)
        {
            lbox.Items.Clear();
            foreach (TypPliku typ in TypPliku.TypyPlikow)
            {
                lbox.Items.Add(typ);
            }
        }
		// Private Methods (1) 

        private void SerachDir(Folder f, ListView listView1)
        {
            foreach (Plik p in f.Pliki)
            {
                foreach (string slowo in SlowaW)
                {
                    if(p.Nazwa.ToLower().Contains(slowo))
                    {
                        p.ShowListViewFileInfo(listView1);
                    }
                }
            }
            foreach (Folder fo in f.Podflodery)
            {
                SerachDir(fo, listView1);
            }
        }

		#endregion Methods 
    }
}
